package sample;

public class Negative {
    /*
    	基于回调的服务使用一个匿名 Callback 作为参数。后者的两个方法分别在异步执行成功 或异常时被调用。
        获取到收藏ID的list后调用第一个服务的回调方法 onSuccess。
        如果 list 为空， 调用 suggestionService。
        服务 suggestionService 传递 List<Favorite> 给第二个回调。
        既然是处理 UI，我们需要确保消费代码运行在 UI 线程。
        使用 Java 8 Stream 来限制建议数量为5，然后在 UI 中显示。
        在每一层，我们都以同样的方式处理错误：在一个 popup 中显示错误信息。
        回到收藏 ID 这一层，如果返回 list，我们需要使用 favoriteService 来获取 Favorite 对象。由于只想要5个，因此使用 stream 。
        再一次回调。这次对每个ID，获取 Favorite 对象在 UI 线程中推送到前端显示。
     */
    /*
    userService.getFavorites(userId, new Callback<List<String>>() {
        public void onSuccess(List<String> list) {
            if (list.isEmpty()) {
                suggestionService.getSuggestions(new Callback<List<Favorite>>() {
                    public void onSuccess(List<Favorite> list) {
                        UiUtils.submitOnUiThread(() -> {
                            list.stream()
                                    .limit(5)
                                    .forEach(uiList::show);
                        });
                    }

                    public void onError(Throwable error) {
                        UiUtils.errorPopup(error);
                    }
                });
            } else {
                list.stream()
                        .limit(5)
                        .forEach(favId -> favoriteService.getDetails(favId,
                                new Callback<Favorite>() {
                                    public void onSuccess(Favorite details) {
                                        UiUtils.submitOnUiThread(() -> uiList.show(details));
                                    }

                                    public void onError(Throwable error) {
                                        UiUtils.errorPopup(error);
                                    }
                                }
                        ));
            }
        }

        public void onError(Throwable error) {
            UiUtils.errorPopup(error);
        }
    });*/
}
